﻿//大科学家dd最近在研究转基因白菜，白菜的基因序列由一串大写英文字母构成，
//dd经过严谨的推理证明发现，只有当白菜的基因序列呈按位非递减形式时，这株白菜的高附加值将达到最高，
//于是优秀的dd开始着手修改白菜的基因序列，dd每次修改基因序列的任意位需要的代价是1，
//dd想知道，修改白菜的基因序列使其高附加值达到最高，所需要的最小代价的是多少。
//
//输入描述 :
//	第一行一个正整数n(1≤n≤1000000)
//	第二行一个长度为n的字符串，表示所给白菜的基因序列
//	保证给出字符串中有且仅有大写英文字母
//输出描述 :
//	输出一行，表示最小代价
//
//输入
//	5
//	ACEBF
//输出
//	1
//说明
//	改成ACEEF或者ACEFF，都只用改动一个字符，所需代价最小为1


#include <iostream>
#include <string>
using namespace std;
const int N = 1e6 + 10;
int n;
string s;
char dp[N]; // dp[i] 表示：长度为 i 的所有的⼦序列中，最小的末尾是多少
int ret;
int main()
{
	cin >> n >> s;
	for (int i = 0; i < n; i++)
	{
		char ch = s[i];
		// 找出 ch 应该放在哪个位置
		if (ret == 0 || ch >= dp[ret])
		{
			dp[++ret] = ch;
		}
		else
		{
			// ⼆分出 ch 应该放的位置
			int left = 1, right = ret;
			while (left < right)
			{
				int mid = (left + right) / 2;
				if (dp[mid] > ch) right = mid;
				else left = mid + 1;
			}
			dp[left] = ch;
		}
	}

	cout << n - ret << endl;

	return 0;
}